import java.util.ArrayList;

public class Nodo {
	
	private Elemento val;
	private Nodo izq;
	private Nodo der;
	
	public Nodo(){
		val = null;
		izq = null;
		der = null;
	}
	
	public Nodo(Elemento val){
		this.val = val;
		izq = null;
		der = null;
	}
	
	public Nodo(Elemento val, Nodo izq, Nodo der){
		this.val = val;
		this.izq = izq;
		this.der = der;
	}
	
	public boolean agregarVal(Elemento val){
		boolean agregado = false;
		if(isEmpty()){
			this.val = val;
			agregado = true;
		}
		else{
			agregado = false;
		}
		return agregado;
	}

	public Elemento getVal() {
		return val;
	}

	public void setVal(Elemento val) {
		this.val = val;
	}

	public Nodo getIzq() {
		return izq;
	}

	public void setIzq(Nodo izq) {
		this.izq = izq;
	}

	public Nodo getDer() {
		return der;
	}

	public void setDer(Nodo der) {
		this.der = der;
	}
	
	public boolean isEmpty(){
		return val == null;
	}
	
	public boolean isLeaf(){
		return (izq == null&& der == null);
	}
	
	public ArrayList<Elemento> getLeafs(){
    	ArrayList<Elemento> al = new ArrayList<Elemento>();
    	if(isLeaf())
            al.add(this.val);
        else{
        	if(izq!=null)
        		al.addAll(izq.getLeafs());
        	if(der!=null)
        		al.addAll(der.getLeafs());
        }
    	return al;
    }
	
	public void setCodigo(String codigo){
		val.setCodigo(codigo);
		if(izq!=null){
			izq.setCodigo(codigo);
		}
		if(der!=null){
			der.setCodigo(codigo);
		}
	}
	
	public boolean hasLeft(){
		boolean a;
		if(izq==null)
			a =false;
		else
			a=true;
		
		return a;
	}
	
	public boolean hasRight(){
		boolean a;
		if(der==null)
			a =false;
		else
			a=true;
		
		return a;
	}
}
